home *** CD-ROM | disk | FTP | other *** search
- ;Compile:
- ; tasm nix2nd
- ; tlink nix2nd
- ;
- ;Deze demo is misschien een beetje lame maar ja who doesn't
- ;PLease use it to learn things not to fuck things bye bye
- ;Yepz een nieuw demoootje van NiX en ook deze keer weer gemaakt door SariX
- ;Natuurlijk de Graphics niet (Geen TALENT) maar gelukkig hebbe we SKiN ook
- ;nog op stal staan en die heeft zich effe uitgeleefd.
- ;Thanx gaan naar:
- ; SKiN - Lenen van officeel boek van TASM v2.0
- ; Dreaden/VLA - Zorgen voor voorbeeld van Sterretjes
- ; Troop - Voor het idee van releasen demo
-
- ;Demootje is een beetje een chaos als je eruit komt optimaliseer de code effe
- ;Thanx
- ;de code is nu een beetje minder chaos behalve het einde, daar is geen touw
- ;aan vast te knopen
-
-
- ;alle include files zijn:
- ; ster.dw locatie sterretjes
- ; font.dmo het fontje
- ; nix.xgx het plaatje
- ; grap.xpx en dit is het paletje
- ; endmes.txt en dit zijn de credits
-
- ;Greetz to everbody Sarix
-
-
- dosseg
- jumps
- .model small
- .stack
- .code
- .286
- assume cs:@code,ds:@data
-
- .data
- Ideal
-
- BewaarSchermData dw 2000 dup (?)
- BewaarCursor dw ?
-
- lijnYpos1 dw 0 ;lijn voor laatste stuk scherm uitzetten
- lijnYpos2 dw 202 ;plaat voor lijn van laatste stuk
- lijnXpos1 dw -1
- lijnXpos2 dw 320
- exi db 0 ;mag eruit of niet 0 is geen fade out 1
- ;of hoger wel
-
- STRUC Ster ;effe de Sterretje.Xpos sterretje.Ypos
- Xpos dw 0 ;en de Sterretje.Opos defineren
- Ypos dw 0
- Opos dw 0
- ENDS
-
- include "ster.dw"
-
- Slevel1 dw 1 ;defineer snelheid voor lagen
- Slevel2 dw 2
- Slevel3 dw 3
- Slevel4 dw 4
- Slevel5 dw 5
-
- Klevel1 db 5 ;joepie de kleurtjes
- Klevel2 db 4 ;van de sterren 5 is donkerder als 1
- Klevel3 db 3 ;ligt eigenlijk aan het palet
- Klevel4 db 2
- Klevel5 db 1
-
- Alevel1 equ 40 ;hoeveel sterretjes in ieder level
- Alevel2 equ 65 ;level1 is 40 level2=25 snappie
- Alevel3 equ 85
- Alevel4 equ 95
- Alevel5 equ 100
-
- lengtepallette dw 768 ;256 kleurtjes keer 3
-
- include 'grap.xpx' ;joeperdepoepie de palet data
-
-
- SchermHoogte equ 200 ;wat zou dit toch zijn
- SchermBreedte equ 320
-
- LABEL YposTabel WORD ;opzoek tabel voor ypositie
- i=0
- REPT SchermHoogte
- dw i*SchermBreedte
- i=i+1
- ENDM
-
- ;data logo
- include "nix.xgx" ;het logoootje van nix
- LengteLogoX dw 160 ;aantal puntjes breed
- LengteLogoY dw 57 ;aantal puntjes hoog
- Lxpos dw 80 ;de xpositie van het logo
- Lypos dw 0 ;de ypositie van het logo
- LupDown dw 0 ;gaat het logo up of down 1 is up 0 is down
- LUmax dw 25 ;tot welke regel mag het logootje omhoog
- LDmax dw 75 ;tot welke regel mag het logootje omlaag
- ;end data logo
-
- ;data tekst
- include "font.dmo" ;tatereda het fontje
- FontLengte equ 16 ;gokje de lengte van een letter
- FontHoogte equ 22
-
-
- PosTekstX dw PosTekstOrgX ;de positie waar de letter moet komen
- PosTekstY dw PosTekstOrgY ;van deze twee afblijfe
- PosTekstOrgX equ 64 ;de positie waar de regel komt
- PosTekstOrgY equ 132 ;aan deze twee mag je aankomme
-
- welkel dw 1 ;welke letter moet leze gewoon afblijven
-
- maxaantal equ 12 ;hoeveel letters op 1 regel
- beginpost dw 0 ;afblijfe is positie welk letter moet lezen
- alfabet db 'abcdefghijklmnopqrstuvwxyz ' ;de opzoek tabel voor letters
- lengtealfabet equ 28
- label tekst byte
-
- db ' '
- db ' welcome '
- db ' to '
- db 'the improved'
- db 'nix couriers'
- db ' intro '
- db ' '
- db ' it started '
- db ' with those '
- db ' nice stars '
- db 'and it ended'
- db ' in this '
- db ' bloody demo'
- db ' '
- db 'and now the '
- db 'usual stuff '
- db ' '
- db 'grtx fly to '
- db ' uhm uhmm '
- db ' whizz kid '
- db 'from microbe'
- db ' '
- db 'and here is '
- db ' his number '
- db ' zero four '
- db ' nine five '
- db ' zero four '
- db ' six one '
- db ' eight zero '
- db ' '
- db 'and ofcourse'
- db ' the credits'
- db ' code '
- db ' sarix '
- db ' logo '
- db ' skin '
- db ' font '
- db ' skin '
- db ' sarix '
- db ' music '
- db ' your radio '
- db ' '
- db 'nothing more'
- db ' to say '
- db ' '
- db ' bye bye '
- db '$'
-
- ;wat zou dat hierboven toch zijn de tekst misschien?????????
-
- include "endmes.txt"
-
- MASM
- .code
- Ideal
-
- ;de controle procedure kan er niet meer over zeggen
- PROC main
- call voortroep ;dingen die eerst gedaan moeten worden
- eerste:
- push @data ;laat ds weer us naar data verwijzen
- pop ds ;waarom ??? geen moeilijke vragen stellen
- push 0a000h
- pop es
-
-
- cmp [LupDown],1 ;mot dat logo omhoog of omlaag
- je LogoUp ;er staat 1 dus het is omhoog
- LogoDown:
- add [Lypos],1 ;zet begin locatie van logo 1 verder
- mov dx,[LDmax] ;effe kijken of de max waarde is bereikt
- cmp [Lypos],dx
- jne LogoDown0 ;nee ga dan gewoon verder
- mov [LupDown],1 ;ja de volgende keer omhoog dermee
- add [beginPost],maxaantal ;en effe andere tekst natuurlijk
- ;is anders ook zo eentonig
- LogoDown0:
- ;call zetlogo ;zet het logo op het scherm
- jmp Sterretjes
- LogoUp:
- sub [Lypos],1 ;zet begin locatie van logo 1 terug
- mov dx,[LUmax] ;effe kijken of de min waarde is bereikt
- cmp [Lypos],dx
- jne LogoUp0 ;nee dan ga maar gewoon verder
- mov [LupDown],0 ;ja dan de volgende keer zakken
- LogoUp0:
- ;call zetlogo ;zet logootje op scherm
-
-
- Sterretjes:
- call VRTRETRACE ;verhinder 'snow'
- call zetregel ;zet tekst
- call zetlogo
- call beweegster ;zet sterretjes
-
-
- cmp [exi],1 ;is al op ESC gedrukt of niet
- jae bexit ;ja hoor ga effe fade
-
- toets_pauze:
- in al,60h ;nope check voor escape
- cmp al,1
- jne eerste ;geen escape gedrukt
- ;doe de hele zooi nog 1 keer
- mov [exi],1 ;ja hoor er is op escape gedrukt
- jmp bexit ;ga dus effe fade
- exit:
- in al,21h ;joepie het toetsenbord mag weer aan
- and al,253
- out 21h,al
-
- mov ax,3 ;terug naar tekst mode
- int 10h
-
- mov dx,offset endmessie ;druk laatste credits af
- mov ah,9
- int 21h
-
- exitwachten:
- mov ah,1 ;gelezen ??
- int 16h
- je exitwachten ;nee effe wachten dan
-
- push @data ;zet het oude scherm weer terug
- pop ds
- push 0b800h
- pop es
- mov si,offset BewaarSchermData
- xor di,di
- mov cx,2000
- repz movsw
-
- mov ah,2 ;en de oude cursor positie
- mov bh,0
- mov dx,[BewaarCursor]
- int 10h
-
- mov ah,4ch ;terug naar dOs
- int 21h
- exit2:
-
- push 0a000h ;laat es naar schermseg wijzen
- pop es
- xor di,di
- mov al,0FEh ;effe scherm schrijven met andere kleur
- mov cx,SchermBreedte*SchermHoogte
- repz stosb ;anders komt er een kut rand
-
- mov ax,1010h ;kleur 0 weer 0 maken
- xor bx,bx
- xor cx,cx
- xor dx,dx
- int 10h
-
- xor si,si ;klap scherm dicht
- mov cx,SchermHoogte/4
- exit2a:
- call VRTRETRACE
- push cx
- add [lijnYpos1],1 ;1 lijntje meer dichtklappen
- sub [lijnYpos2],1
- call zetlijn
- add [lijnYpos1],1 ;1 lijntje meer dichtklappen
- sub [lijnYpos2],1
- call zetlijn
-
- pop cx
- loop exit2a
-
- sub [lijnYpos2],1 ;zet de locatie voor laatste witte lijntje
- mov cx,SchermBreedte/6
- exit2b:
- call vrtretrace
- push cx
- add [lijnXpos1],1 ;haal laatste witte lijntje weg
- sub [lijnXpos2],1
- call zetpunt
- add [lijnXpos1],1 ;haal laatste witte lijntje weg
- sub [lijnXpos2],1
- call zetpunt
- add [lijnXpos1],1 ;haal laatste witte lijntje weg
- sub [lijnXpos2],1
- call zetpunt
-
-
- pop cx
- loop exit2b
-
- jmp exit
-
-
-
-
- bexit:
- add [exi],1 ;effe kijken of er al 63 kleuren bij zitten
- cmp [exi],70 ;ja dan is fade out afgelope en mag de demo stoppen
- je exit2 ;stoppe!!!!!!!!
- pusha ;bewaar de zooi registers effe
- push es ds
- mov ax,@data ;laat es en ds naar data wijzen
- mov ds,ax ;voor te laden en te schrijven
- mov es,ax ;van het palet
-
- mov si,offset nixpal ;laat naar palet data wijzen
- mov di,offset nixpal
- mov cx,[LengtePallette]
-
- bexit0:
- lodsb ;laat kleur
- add al,1 ;verhoog waarde met 1
- cmp al,63 ;is al 63
- jb bexit1 ;nee schrijf waarde weg
- mov al,63 ;zet op 63
- bexit1:
- stosb ;schrijf palet waarde
- loop bexit0 ;herhaal heel het palet
-
-
- mov dx,offset nixpal ;zet palet
- mov ax,1012h
- mov bx,0
- mov cx,256
- int 10h
- pop ds es ;herstel de troep weer
- popa
- jmp eerste ;en weer terug
-
-
- ENDP main
-
- PROC zetpunt
- mov di,[lijnYpos2]
- add di,di
- mov di,[di + YposTabel]
-
- add di,[lijnXpos1] ;bepaal plaats
- xor al,al ;kleur 0
- stosb ;zet puntje
-
- mov di,[lijnYpos2]
- add di,di
- mov di,[di + YposTabel]
-
- add di,[lijnXpos2]
- stosb
- ret
- ENDP zetpunt
-
- PROC zetlijn
-
- mov di,[lijnYpos1] ;bepaal positie
- add di,di
- mov di,[di + YposTabel]
- xor al,al
- mov cx,SchermBreedte ;teken zwarte lijn
- repz stosb
- mov di,[lijnYpos2] ;bepaal positie
- add di,di
- mov di,[di + YposTabel]
- xor al,al
- mov cx,SchermBreedte ;teken zwarte lijn
- repz stosb
- ret
- ENDP zetlijn
-
-
- PROC VRTRETRACE
- mov dx,3dah ;effe checken voor 'snow'
- vrt:
- in al,dx ;is het hele scherm al opgebouwd
- test al,8 ;of niet
- jnz vrt
- NoVRT:
- in al,dx
- test al,8
- jz novrt ;klaar met checken
- ret
- ENDP VRTRETRACE
-
-
- PROC Voortroep
- push @data ;laat ds naar data wijzen
- pop ds ;om de cursor en het scherm effe te saven
- push 0b800h
- pop es
-
- mov ah,3 ;bewaar de cursor
- mov bh,0
- int 10h
- mov [bewaarCursor],dx
-
- mov si,offset BewaarSchermData ;bewaar het scherm
- xor di,di
- mov cx,2000
- voortroep_a:
- mov ax,[es:di]
- mov [ds:si],ax
- add di,2
- add si,2
- loop voortroep_a
-
- mov ax,13h ;stel vga mode in
- int 10h
-
- in al,21h ;zet het toetsenbord uit
- or al,2
- out 21h,al
-
- neg [slevel1] ;ik wil effe de sterretjes
- neg [slevel2] ;de andere kant op hebben
- neg [slevel3]
- neg [slevel4]
- neg [slevel5]
-
- push @data ;joeperdepoepie effe het palet instellen
- pop es
- mov dx,offset nixpal
- mov ax,1012h
- mov bx,0
- mov cx,256
- int 10h
- ret
- ENDP voortroep
-
-
-
-
- PROC ZetLogo
- pusha
- push es ds ;bewaar de zooi
-
- push 0a000h ;scherm segment
- pop es
- xor si,si
-
- mov di,[Lypos] ;bepaal y positie
- add di,di
- mov di,[di + YposTabel]
-
- add di,[Lxpos] ;bepaal de totale positie
-
- mov si,offset nixgfx ;laat naar logo wijzen
-
- mov cx,[LengteLogoY] ;zet logo neer
- zetlogo1:
- push cx
- mov cx,[LengteLogoX]
- repz movsb ;eerst een x regel
- pop cx
- add di,SchermBreedte
- sub di,[LengteLogoX]
- loop zetlogo1 ;dan ga naar volgende x regel
-
- pop ds es ;herstel de troep
- popa
- ret
- ENDP ZetLogo
-
-
-
-
- PROC BeweegSter
- Pusha ; bewaar de troep
- push es ds
-
-
- push 0a000h ;laat es naar vgasegment wijzen
- pop es
-
- xor ax,ax ;voor veiligheid ax effe leeg
- xor si,si ;maak si leeg anders schrijven niet kloppen
-
- mov bp,[Slevel1] ;zet de snelheid en kleur in registers
- mov al,[Klevel1]
- level1:
- call ZetSter
- add si,size ster ;is het aantal
- cmp si,(size ster)*Alevel1 ;sterretjes getekend
- jb level1 ;nee dan teken er nog maar wat
-
-
- mov bp,[Slevel2] ;zie level 1 voor commment
- mov al,[Klevel2]
- level2:
- call ZetSter
- add si,size ster
- cmp si,(size ster)*Alevel2
- jb level2
-
-
-
- mov bp,[Slevel3]
- mov al,[Klevel3]
- level3:
- call ZetSter
- add si,size ster
- cmp si,(size ster)*Alevel3
- jb level3
-
-
-
- mov bp,[Slevel4]
- mov al,[Klevel4]
- level4:
- call ZetSter
- add si,size ster
- cmp si,(size ster)*Alevel4
- jb level4
-
- mov bp,[Slevel5]
- mov al,[Klevel5]
- level5:
- call ZetSter
- add si,size ster
- cmp si,(size ster)*Alevel5
- jb level5
-
-
- pop ds es ;herstel de troep
- Popa
- ret
- ENDP beweegster
-
-
-
-
-
-
- PROC ZetSter
- mov di,[si + Sterretje.Opos] ;verwijder oud puntje
-
- mov dl,[es:di] ;effe checken of je wel een
- ;puntje weg haalt
- cmp dl,[Klevel5] ;is de plaats kleur van level5
- je OkTeken1 ;ja dan mag je teken
- cmp dl,[Klevel4] ;enz
- je OkTeken1
- cmp dl,[Klevel3]
- je OkTeken1
- cmp dl,[Klevel2]
- je OkTeken1
- cmp dl,[Klevel1]
- je OkTeken1
-
- jmp GeTekend1 ;nee dan mag je niet tekenen
- OkTeken1:
- mov [byte es:di],0
- GeTekend1:
- mov di,[si + Sterretje.Ypos] ;laat ypos
- add di,di
- mov di,[di + YposTabel]
-
- add [si + Sterretje.Xpos],bp ;tel snelheid er bij op
-
- cmp [si + Sterretje.Xpos],SchermBreedte ;niet voorbij scherm
- jl GeenOver ;nee ga naar tekort
- sub [si + Sterretje.Xpos],SchermBreedte ;ja dan trek er schermbreedte af
- GeenOver:
- cmp [si + Sterretje.Xpos],0 ;niet te kort
- jge GeenTeWeinig ;nee ga door
- add [si + Sterretje.Xpos],SchermBreedte ;ja tel SchermBreedte er bij op
- GeenTeWeinig:
- add di,[si + Sterretje.Xpos]
-
-
- mov dl,[es:di] ; lees puntje waar ster getekend moet worden
- cmp dl,0 ; is dat een 0 of een 16 (16 van font)
- je OkTeken ;dan mag getekend worden
- jmp GeTekend ;anders niet
- OkTeken:
- mov [es:di],al ;teken sterretje
- GeTekend:
- mov [si + Sterretje.OPos],di ;bewaar oude locatie
- ret
- ENDP ZetSter
-
-
- PROC Zetregel
- pusha ;ja dit weet je nu wel
- push es ds
-
- mov ax,@data
- mov ds,ax
- push 0a000h
- pop es
-
-
- Beginregel:
- mov si,offset tekst ;zet begin tekst in si
-
- add si,[beginpost] ;zet begin van zin
- jmp NietOpnieuwRegel
- OpnieuwRegel:
- mov bx,0 ;tekst is op dus begin weer opnieuw
- mov [beginpost],bx
- jmp beginregel
- NietOpnieuwRegel:
- mov cx,maxaantal ;hoeveel letter op 1 regel
- leesvolg:
- lodsb ;lees letter in
- cmp al,'$'
- je OpnieuwRegel ;is einde van tekst begin opnieuw
- mov bx,ax ;zet letter in bx
- call leeswelkelet ;kijk welke letter het is
- call zetletter ;zet de letter op het scherm
-
- add [PosTekstX],FontLengte
-
- loop leesvolg ;zet de volgende letter van de zin op het scherm
-
- mov bx,PosTekstOrgX ;zet de orginele locatie neer voor de volgende zin
- mov [PosTekstX],bx
- mov bx,PosTekstOrgY
- mov [PosTekstY],bx
-
-
- pop ds es ;herstel de troep en ga terug
- popa
- ret
- ENDP Zetregel
-
- PROC Leeswelkelet
-
- pusha
- xor cx,cx
- mov si,offset alfabet
- zoeklet:
- lodsb ;laat letter van alfabet in
- cmp ax,bx ;is het dezelfde letter
- je letgevonden ;ja dan zet welkel goed
- inc cx ;nee dan is het misschien 1 letter verder
- cmp cx,lengtealfabet ;teveel letters geprobeerd
- jne zoeklet ;kijk nog 1 letter
-
- letgevonden:
- mov [welkel],cx ;zet welkel
- popa
- ret
- ENDP Leeswelkelet
-
- PROC Zetletter
- pusha
- mov ax,FontLengte*FontHoogte ;zet begin letter in data klaar
- mov bx,[welkel]
- mul bx
- mov si,offset font
- add si,ax
-
- mov di,[PosTekstY] ;zet positie waar letter op scherm
- add di,di ;moet komen
- mov di,[di + YPosTabel]
- add di,[PosTekstX]
-
-
- mov cx,FontHoogte
- leeslet:
- push cx
- mov cx,FontLengte ;zet 1 regel van de letter
- repz movsb
- add di,SchermBreedte ;tel schermbreedte er bij op
- sub di,FontLengte ;en fontlengte er van af om de
- pop cx ;2 de plaats te komen
- loop leeslet ;zet nog wat regels
-
- popa
- ret
- ENDP Zetletter
-
-
-
- ;klaaaaaaaaaaaaaaaaaaaaaaaaar he he het documenteren van de demo is het kutste
- ;werk wat er bestaat het zal nog wel wat raar zijn maar ja alleen ik mot het
- ;snappe snappie
- ;cu l8r
-
- ;PLease use it to learn things not to fuck things bye bye
-
- end main
-
-
-
-